﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Frogs.Stability.LeakyBucket
{
    /// <summary>
    /// Base definition of a leaky bucket
    /// </summary>
    public interface ILeakyBucket
    {
        /// <summary>
        /// Add a single drop to the bucket
        /// </summary>
        void AddSingleDrop();

        /// <summary>
        /// Add a specific number of drops to the bucket
        /// </summary>
        /// <param name="num"></param>
        void AddDrops(int num);

        /// <summary>
        /// Instantly fill the bucket
        /// </summary>
        void FillUp();

        /// <summary>
        /// Empty the bucket
        /// </summary>
        void Empty();

        /// <summary>
        /// Exposes the bucket state
        /// </summary>
        IObservable<BucketState> WaterLevel { get; }

    }
}
